import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from '../guard/jwt-auth.guard';

// 定义认证选项接口
export interface AuthOptions {
  // 是否需要验证
  required?: boolean;
  // 可以添加角色验证
  roles?: string[];
  // 可以添加其他自定义选项
  [key: string]: any;
}

// 元数据key
export const AUTH_OPTIONS_KEY = 'auth_options';

// 创建一个装饰器，支持传入参数
export function Auth(options?: AuthOptions) {
  // 默认选项
  const defaultOptions: AuthOptions = {
    required: true,
    ...options
  };
  
  return applyDecorators(
    // 设置元数据，将选项传递给守卫
    SetMetadata(AUTH_OPTIONS_KEY, defaultOptions),
    // 使用JWT守卫
    UseGuards(JwtAuthGuard)
  );
}